package br.ita.supertrunfo.server.core.remoteobserver;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import java.util.LinkedList;

import br.ita.supertrunfo.common.core.interfaces.remoteobserver.ObservadorRemoto;
import br.ita.supertrunfo.common.core.interfaces.remoteobserver.SujeitoRemoto;

public class SujeitoRemotoImpl extends UnicastRemoteObject implements SujeitoRemoto {

	private static final long serialVersionUID = 1L;
    private LinkedList<ObservadorRemoto> listaDeObservadoresRemotos = new LinkedList<ObservadorRemoto>();
	
	protected SujeitoRemotoImpl() throws RemoteException { }

    //@Override
	public void notificaObservadoresRemotos(String mensagem) throws RemoteException {
        for(int i = 0; i < this.listaDeObservadoresRemotos.size(); i++)
        	this.listaDeObservadoresRemotos.get(i).atualiza(mensagem);		
	}

    //@Override	
	public void registraComoObservadorRemoto(ObservadorRemoto observadorRemoto) throws RemoteException {
		this.listaDeObservadoresRemotos.add(observadorRemoto);
	}

    //@Override
	public void removeObservadorRemoto(ObservadorRemoto observadorRemoto) throws RemoteException {
		this.listaDeObservadoresRemotos.remove(observadorRemoto);
	}

    public void removeTodosOsObservadoresRemotos() throws RemoteException {
        this.listaDeObservadoresRemotos.clear();
    }
}
